//
//  base01-1.m
//  base01-1
//
//  Created by China Dragon on 2022/4/12.
//
/*
 Objective-C程序结构
 https://www.yiibai.com/objective_c/objective_c_program_structure.html#article-start
 
 Objective-C程序基本上由以下部分组成 -
 预处理程序命令
 接口
 实现
 方法
 变量
 声明和表达
 注释
 */
#import <Foundation/Foundation.h>

// 类接口声明
@interface SimpleClass : NSObject
-(void) sayhello;
@end

// 类实现
@implementation SimpleClass
-(void) sayhello{
    NSLog(@"this is my frist simple \n");
}
@end

int main(){
    /*
     objective-c的alloc和init https://blog.csdn.net/linxinfa/article/details/87935086
     alloc 是在物理内存中分配了一块内存，并且返回一个指针。
     */
    SimpleClass *simpleClass = [[SimpleClass alloc]init];
    [simpleClass sayhello];
    /*
     objective-c alloc分析
     https://blog.csdn.net/yjw19920230/article/details/108416850
     */
    SimpleClass *s1 = [SimpleClass alloc];
    //此时s1还不能使用，因为它的内存状态还没有得到正确的设置。
    //init 设置对象的初始化状态并且将其返回。
//    SimpleClass *s2 = [SimpleClass init];//这样写报错
    SimpleClass *s3 = [s1 init];
    SimpleClass *s4 = [s1 init];
    NSLog(@"%@ -- %p -- %p",s1,s1,&s1);
//    NSLog(@"%@ -- %p -- %p",s2,s2,&s2);
    NSLog(@"%@ -- %p -- %p",s3,s3,&s3);
    NSLog(@"%@ -- %p -- %p",s4,s4,&s4);

    return 0;
}
